package com.alfred.springboot.elasticjob.lite.core.autoconfigure;

import com.google.common.collect.Maps;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.List;
import java.util.Map;

@Getter
@Setter
@ConfigurationProperties(prefix = "elasticjob")
public class ElasticJobProperties {

    private static Map<String, ElasticSimpleJob> cachedProperties;

    // 是否启用bean加载elastic job 默认false,为true时开启处理SimpleJob且未注解@ElasticJob的子类
    private boolean enabledBeanMode = false;

    // simpleJob分片参数
    private List<ElasticSimpleJob> simpleJobs;

    /**
     * <pre>
     *     获取ElasticSimpleJobs配置
     *
     * @return 配置map
     * </pre>
    */
    public Map<String, ElasticSimpleJob> getCachedSimpleJobParams() {

        if (null == this.simpleJobs)
            return Maps.newHashMap();

        if (null == cachedProperties) {
            cachedProperties = Maps.newHashMap();
            for (ElasticSimpleJob simpleJob : simpleJobs) {
                cachedProperties.put(simpleJob.getJobClass(), simpleJob);
            }
        }

        return cachedProperties;
    }

    /**
     * <pre>
     *     SimpleJob分片参数
     * </pre>
     */
    @Getter
    @Setter
    public static class ElasticSimpleJob {

        // 本地Class名称
        private String jobClass;

        // corn表达式
        private String corn;

        // 分片总数
        private int shardingTotalCount;

        // 分片参数
        private String shardingItemParameters;

    }


}